package ar.com.tallerdos.smartdinner.activity;

import java.util.ArrayList;
import java.util.List;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import ar.com.tallerdos.smartdinner.R;
import ar.com.tallerdos.smartdinner.business.AgregadoBusiness;
import ar.com.tallerdos.smartdinner.model.Agregado;
import ar.com.tallerdos.smartdinner.sync.AgregadosStock;
import ar.com.tallerdos.smartdinner.sync.GenericAsyncTask;

public class GuarnicionLista extends ListActivity {
    public final static String GUARNICION_SELECCIONADA = "ar.com.tallerdos.smartdinner.activity.GuarnicionLista.GUARNICION_SELECCIONADA";
    private List<Agregado> guarniciones;
    private ArrayAdapter<Agregado> agregadosAdapter;

    private static int agregadoTipo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.agregar_pedido);
	
	new GenericAsyncTask(new AgregadosStock(this), this).execute();

	List<Agregado> guarnicionesAux = AgregadoBusiness.findAll();
	guarniciones = new ArrayList<Agregado>();

	// Se valida que solo se cargen las guarniciones/salsas seg�n el tipo
	// que admita el producto
	if (guarniciones != null) {

	    for (Agregado gr : guarnicionesAux) {
		if (gr.getTipo() == agregadoTipo) {
		    guarniciones.add(gr);
		}
	    }
	    // Verificaci�n en el caso de que el sistema de backend no tenga
	    // cargadas guarniciones o salsas
	    if (guarniciones.size() == 0) {
		AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
		dialogBuilder.setTitle("Aclaracion");
		dialogBuilder.setIcon(R.drawable.ic_plate6);
		dialogBuilder.setMessage("No se han encontrado en el sistema guarniciones/salsas.");
		dialogBuilder.setPositiveButton("Aceptar",
			new DialogInterface.OnClickListener() {

			    @Override
			    public void onClick(DialogInterface dialog,
				    int which) {
			    }
			});
	    }
	}
	this.agregadosAdapter = new MyListAdapter();
	this.setListAdapter(this.agregadosAdapter);

    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
	Intent returnIntent = new Intent();
	Agregado agregadoSeleccionado = AgregadoBusiness.findById(guarniciones.get(position).getId());

	if (agregadoSeleccionado.hayStock()) {
	    returnIntent.putExtra("result", agregadoSeleccionado.getId().toString());
	    setResult(RESULT_OK, returnIntent);
	    finish();
	} else {
	    Toast.makeText(getApplicationContext(),
		    getResources().getString(R.string.noStockDescripcion),
		    Toast.LENGTH_SHORT).show();
	}
    }

    public class MyListAdapter extends ArrayAdapter<Agregado> {

	public MyListAdapter() {
	    super(GuarnicionLista.this, R.layout.item_view2, guarniciones);
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {

	    // Chequeo si tiene una vista con la cual trabajar
	    View itemView = convertView;
	    if (itemView == null) {
		itemView = getLayoutInflater().inflate(R.layout.item_view2, parent, false);
	    }

	    Agregado current = AgregadoBusiness.findById(guarniciones.get(position).getId());
	    ImageView noStockIcon = (ImageView) itemView.findViewById(R.id.noStockIcon);
	    TextView noStockText = (TextView) itemView.findViewById(R.id.noStockText);
	    if (current.hayStock()) {
		noStockIcon.setVisibility(View.INVISIBLE);
		noStockText.setVisibility(View.INVISIBLE);
	    } else {
		noStockIcon.setVisibility(View.VISIBLE);
		noStockText.setVisibility(View.VISIBLE);
	    }

	    ImageView imageView = (ImageView) itemView.findViewById(R.id.item_Icon);
	    imageView.setImageResource(R.drawable.ic_plate6);

	    TextView makeText = (TextView) itemView.findViewById(R.id.icon_Text);
	    makeText.setText(current.getDescripcion());

	    TextView codigo = (TextView) itemView.findViewById(R.id.codigo);
	    codigo.setText("Codigo del Agregado: " + current.getCodigo());

	    TextView makeComensales = (TextView) itemView.findViewById(R.id.textCantidad);
	    makeComensales.setText("");

	    return itemView;

	}
    }

    public static void setAgregadoTipo(int tipo) {
	agregadoTipo = tipo;
    }
    
    public void actualizarLista() {
	this.agregadosAdapter.notifyDataSetChanged();
    }

}
